Aller au contenu principal

Exemples

Chaque page de la section API contient des exemples de sa fonctionnalité. Les exemples ci-dessous combinent plusieurs fonctionnalités.

Détection de la main​

La couleur des LEDs dépend du côté où une main est détectée, blanc pour le capteur du dessus.

import olem

print("Starting ir hand detection test")

start_timestamp = olem.get_time_ms()

while (olem.get_time_ms() - start_timestamp) < 20000:

olem.led_off(olem.LEDALL)

if (olem.ir_side_is_hand_present(olem.FRONT)):
olem.led_on(olem.LEDALL, "#FF0000")

if (olem.ir_side_is_hand_present(olem.RIGHT)):
olem.led_on(olem.LEDALL, "#00FF00")

if (olem.ir_side_is_hand_present(olem.BACK)):
olem.led_on(olem.LEDALL, "#0000FF")

if (olem.ir_side_is_hand_present(olem.LEFT)):
olem.led_on(olem.LEDALL, "#00FFFF")

if (olem.ir_top_is_hand_present()):
olem.led_on(olem.LEDALL, "#FFFFFF")

olem.delay_ms(100)

print("End ir hand detection test")

Module d'extension - GPIO et capteurs IR​

La broche P1 est à HIGH quand une main est devant OLEM, la broche P2 quand une main est derrière.

import olem

print("Starting extension module gpio ir test")

olem.extmod_mode_set(olem.EXTMOD_GPIO)

timestamp_start = olem.get_time_ms()

while ((olem.get_time_ms() - timestamp_start) < 20000):

if (olem.ir_side_is_hand_present(olem.FRONT)):
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.HIGH)
else:
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)

if (olem.ir_side_is_hand_present(olem.BACK)):
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.HIGH)
else:
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)

olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)

print("End of extension module gpio ir test")

Utiliser la force (à corriger)​

Untitled

import olem


THRESHOLD = 500
DEADZONE = 100
MIN_VALUE = 150
STEP = 20
MAX_SPEED = 10 / 10

def get_translation(value):
translation = (value - THRESHOLD) / THRESHOLD
if abs(value - THRESHOLD) < DEADZONE:
return 0
else:
return translation

def set_speed(x, y):
if abs(x) > abs(y):
speed = abs(x)
else:
speed = abs(y)
speed = speed + 1 / 2

if (speed > MAX_SPEED):
olem.set_move_speed(MAX_SPEED)
else:
olem.set_move_speed(speed)

def force_loop():
x = 0
y = 0
front = olem.ir_side_get_sensor_value(olem.FRONT)
right = olem.ir_side_get_sensor_value(olem.RIGHT)
back = olem.ir_side_get_sensor_value(olem.BACK)
left = olem.ir_side_get_sensor_value(olem.LEFT)

# Calculer les déplacements
if front > MIN_VALUE:
x -= get_translation(front)

if back > MIN_VALUE:
x += get_translation(back)

if right > MIN_VALUE:
y -= get_translation(right)

if left > MIN_VALUE:
y += get_translation(left)

# Adapter la vitesse aux déplacements
set_speed(x, y)

if x != 0 or y != 0:
if (x != 0):
x = x / abs(x) * STEP
if (y != 0):
y = y / abs(y) * STEP
olem.move(x, y, 0)

#########################################################
#########################################################
#########################################################

olem.led_off(olem.LEDALL)

# Attendre un appui sur le bouton
while olem.get_power_button_state() == 1:
olem.delay_ms(20)

# Afficher le logo et allumer les LEDs
img = olem.display_img("/common/images/olem_logo.bin")
olem.led_on(olem.LEDALL, "#FFFFFF")

# Changer le filtre pour une détection plus rapide
olem.ir_side_set_filter(2)

while not olem.ir_top_is_hand_present():
force_loop()